package com.Blog.www.service;


import com.Blog.www.po.PageBean;
import com.Blog.www.po.User;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;

/**
 * @author 君未洋
 */
public interface UserService {

    /**
     * 生成随机字符串用
     *
     * @return 返回随机字符串
     */
    String getCheckCode();

    /**
     * 用户登录校验方法
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回查询到的封装类
     */
    User login(String username, String password);

    /**
     * 用户注册添加用方法
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回封装类
     */
    User regist(String username, String password);

    /**
     * 用户随机id的一个获取方法
     *
     * @return 返回随机用户id
     */
    Integer account();


    /**
     * 管理员登录验证方法
     *
     * @param user 要登录验证的用户
     * @param req  需要
     * @param resp 需要
     * @return 返回成功与否
     * @throws ServletException 异常
     * @throws IOException      异常
     */
    boolean managerLogin(User user, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;


    /**
     * 获取用户操作用的分页操作类
     *
     * @param currentPage 当前页数
     * @param rows        每页显示的条数
     * @param status      状态
     * @param identity    身份
     * @return 返回封装对象
     */
    PageBean<User> findUserList(String currentPage, String rows, String status, String identity);

    /**
     * 修改id列表里的数据用户的状态的方法
     *
     * @param userIds 用户id集合
     * @param status  状态
     */
    void changeUser(String[] userIds, String status);

    /**
     * 找回密码用
     *
     * @param username 用户名
     * @param account  账号
     * @param req      页面需要
     * @param resp     页面需要
     * @return 返回成功与否
     * @throws ServletException 异常
     * @throws IOException      异常
     */
    Boolean recall(String username, String account, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;

    /**
     * 修改密码用的
     *
     * @param user        要修改的用户
     * @param password    修改的密码
     * @param oldPassword 旧密码
     * @param req         页面需要
     * @param resp        页面需要
     * @return 返回成功与否
     * @throws ServletException 异常
     * @throws IOException      异常
     */
    boolean changePassword(User user, String password, String oldPassword, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;


    /**
     * 验证码校验方法
     *
     * @param req              需要
     * @param resp             选哟
     * @param verifyCode       验证码
     * @param checkCode_server 验证码
     * @param msg              要显示提示框的key
     * @param address          失败跳转地址
     * @return 返回req
     * @throws ServletException 异常
     * @throws IOException      异常
     */
    HttpServletRequest examineCheckCode(HttpServletRequest req, HttpServletResponse resp, String verifyCode, String checkCode_server, String msg, String address) throws ServletException, IOException;


    /**
     * 登录验证用方法
     *
     * @param req   需要
     * @param resp  需要
     * @param login 登录用户
     * @param auto  是否自动登录
     * @return 返回request
     * @throws ServletException 异常
     * @throws IOException      异常
     */
    HttpServletRequest examineLogin(HttpServletRequest req, HttpServletResponse resp, User login, String auto) throws ServletException, IOException;

    /**
     * 注册验证用方法
     *
     * @param req    页面需要
     * @param resp   页面需要
     * @param regist 注册用用户
     * @return 返回页面需要
     * @throws IOException      异常
     * @throws ServletException 异常
     */
    HttpServletRequest examineRegist(HttpServletRequest req, HttpServletResponse resp, User regist) throws IOException, ServletException;


    /**
     * 在平路回复页用于展示被回复的用户名用
     *
     * @param getCuid 用户id
     * @return 返回用户的名字
     */
    String getUsername(String getCuid);

    /**
     * 游客登录用创建登录账号方法
     *
     * @return 返回注册的随机游客账号
     */
    User touristLogin();


    /**
     * 用于查询历史登录的游客或用户的
     *
     * @param userId 保存在Cookie上的用户id
     * @return 返回查询到的用户
     */
    User autoLogin(Integer userId);

    /**
     * 擦除cookie数据的
     *
     * @param cs   cookie集合
     * @param resp 必要的
     * @return 返回必要数据
     */
    HttpServletResponse deleteCookie(Cookie[] cs, HttpServletResponse resp);


    /**
     * 上传图片用的
     *
     * @param part 传入获取的数据
     * @param user 目前登录的用户
     * @return 返回操作的成功与否
     */
    Boolean addImg(Part part, User user);

    /**
     * 设置用户封禁时间要用
     * @param userIds 用户id集合
     * @param banTime 封禁时间
     * @param req 必要参数
     * @return 返回必要参数
     */
    HttpServletRequest banTime(String[] userIds, Integer banTime, HttpServletRequest req);
}
